FROM debian:buster

# Add network setting files if there are
#ADD ./apt.conf /etc/apt/
#ADD ./resolv.conf /etc/
ADD ./sources.list /etc/apt/

# Install some packages
RUN apt-get update
RUN apt-get -y upgrade
RUN apt-get install -y debootstrap bash vim jq sudo aptitude git tar zip screen wget build-essential screen libncurses5

# Install some packages to run cfg of TOPPERS/ASP
RUN dpkg --add-architecture i386
RUN aptitude update
RUN aptitude install -y libc6-dev-i386

# Create user and pasword
ARG USER=""
ARG PASS=""
ARG USER_ID=""
RUN useradd -m -u $USER_ID -s /bin/bash -p $PASS $USER
RUN usermod -aG sudo $USER

# Create persistent workspace
RUN mkdir /home/$USER/workspace
RUN chown $USER:$USER /home/$USER/workspace
VOLUME /home/$USER/workspace

# Copy user setting files here
ADD ./.gitconfig        /home/$USER
ADD ./.bash_aliases     /home/$USER
ADD ./.gdbinit          /home/$USER
ADD ./.screenrc         /home/$USER
# Copy script files
ADD ./00_run_screen.sh  /home/$USER
ADD ./01_run_openocd.sh /home/$USER
ADD ./02_run_gdb.sh     /home/$USER
ADD ./openocd.cfg       /home/$USER
# Copy patch file
ADD ./patch-files-for-asp/ /home/$USER/patch-files-for-asp/

RUN chown -R $USER:$USER /home/$USER

USER $USER
WORKDIR /home/$USER

# toolhain
WORKDIR /home/$USER
RUN mkdir -p toolchain
RUN wget https://static.dev.sifive.com/dev-tools/riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-ubuntu14.tar.gz
RUN wget https://static.dev.sifive.com/dev-tools/riscv-openocd-0.10.0-2019.08.2-x86_64-linux-ubuntu14.tar.gz
RUN tar -xvf riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-ubuntu14.tar.gz
RUN tar -xvf riscv-openocd-0.10.0-2019.08.2-x86_64-linux-ubuntu14.tar.gz
RUN cp -rf riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-ubuntu14/* toolchain/
RUN cp -rf riscv-openocd-0.10.0-2019.08.2-x86_64-linux-ubuntu14/* toolchain/

# Setup asp
WORKDIR /home/$USER
RUN wget https://www.toppers.jp/download.cgi/asp_arch_riscv32_gcc-1.9.3.tar.gz
RUN wget https://www.toppers.jp/download.cgi/asp-1.9.3.tar.gz
RUN wget https://www.toppers.jp/download.cgi/cfg-linux-static-1_9_3.gz
RUN tar -xvf asp-1.9.3.tar.gz
RUN tar -xvf asp_arch_riscv32_gcc-1.9.3.tar.gz
RUN gzip -d cfg-linux-static-1_9_3.gz

# Install cfg with exec permission
RUN mkdir -p asp/cfg/cfg
RUN mv cfg-linux-static-1_9_3 asp/cfg/cfg/cfg
RUN chmod a+x asp/cfg/cfg/cfg

# git
RUN mkdir asp.git
RUN git init asp.git
RUN cp -rf asp/* asp.git/
WORKDIR /home/$USER/asp.git
RUN git add . && git commit -a -s -m "Initial commit"

# Create asp dirs for each cpu freq
WORKDIR /home/$USER
RUN cp -rf asp.git asp-16mhz.git
RUN cp -rf asp.git asp-85mhz.git
RUN cp -rf asp.git asp-256mhz.git

# apply patch files
WORKDIR /home/$USER/asp-16mhz.git
RUN git am /home/$USER/patch-files-for-asp/0001-target-Fix-toolchain-name-in-Makefile.prc.patch
RUN git am /home/$USER/patch-files-for-asp/0002-target-Support-get_utm-function-by-mcycle-register.patch
RUN git am /home/$USER/patch-files-for-asp/0003-target-Reduce-STACK_SIZE-cause-HiFive1-support-ony-1.patch
WORKDIR /home/$USER/asp-85mhz.git
RUN git am /home/$USER/patch-files-for-asp/0001-target-Fix-toolchain-name-in-Makefile.prc.patch
RUN git am /home/$USER/patch-files-for-asp/0002-target-Support-get_utm-function-by-mcycle-register.patch
RUN git am /home/$USER/patch-files-for-asp/0003-target-Reduce-STACK_SIZE-cause-HiFive1-support-ony-1.patch
RUN git am /home/$USER/patch-files-for-asp/0004-target-Change-CPU-frequency-from-default-16Mhz-to-85.patch
WORKDIR /home/$USER/asp-256mhz.git
RUN git am /home/$USER/patch-files-for-asp/0001-target-Fix-toolchain-name-in-Makefile.prc.patch
RUN git am /home/$USER/patch-files-for-asp/0002-target-Support-get_utm-function-by-mcycle-register.patch
RUN git am /home/$USER/patch-files-for-asp/0003-target-Reduce-STACK_SIZE-cause-HiFive1-support-ony-1.patch

# Build each perf in asp-16mhz.git
WORKDIR /home/$USER
ENV PATH /home/$USER/toolchain/bin/:${PATH}
RUN mkdir asp-16mhz.git/OBJ-SAMPLE
RUN mkdir asp-16mhz.git/OBJ-PERF0
RUN mkdir asp-16mhz.git/OBJ-PERF1
RUN mkdir asp-16mhz.git/OBJ-PERF2
RUN mkdir asp-16mhz.git/OBJ-PERF3
RUN mkdir asp-16mhz.git/OBJ-PERF4
WORKDIR /home/$USER/asp-16mhz.git/OBJ-SAMPLE
RUN ../configure -T ../target/hifive1_gcc/
RUN make clean && make depend && make
WORKDIR /home/$USER/asp-16mhz.git/OBJ-PERF0
RUN ../configure -T ../target/hifive1_gcc/ -A perf0 -a ../test -U "test_lib.o histogram.o"
RUN make clean && make depend && make
WORKDIR /home/$USER/asp-16mhz.git/OBJ-PERF1
RUN ../configure -T ../target/hifive1_gcc/ -A perf1 -a ../test -U "test_lib.o histogram.o"
RUN make clean && make depend && make
WORKDIR /home/$USER/asp-16mhz.git/OBJ-PERF2
RUN ../configure -T ../target/hifive1_gcc/ -A perf2 -a ../test -U "test_lib.o histogram.o"
RUN make clean && make depend && make
WORKDIR /home/$USER/asp-16mhz.git/OBJ-PERF3
RUN ../configure -T ../target/hifive1_gcc/ -A perf3 -a ../test -U "test_lib.o histogram.o"
RUN make clean && make depend && make
WORKDIR /home/$USER/asp-16mhz.git/OBJ-PERF4
RUN ../configure -T ../target/hifive1_gcc/ -A perf4 -a ../test -U "test_lib.o histogram.o"
RUN make clean && make depend && make

# Build each perf in asp-85mhz.git
WORKDIR /home/$USER
ENV PATH /home/$USER/toolchain/bin/:${PATH}
RUN mkdir asp-85mhz.git/OBJ-SAMPLE
RUN mkdir asp-85mhz.git/OBJ-PERF0
RUN mkdir asp-85mhz.git/OBJ-PERF1
RUN mkdir asp-85mhz.git/OBJ-PERF2
RUN mkdir asp-85mhz.git/OBJ-PERF3
RUN mkdir asp-85mhz.git/OBJ-PERF4
WORKDIR /home/$USER/asp-85mhz.git/OBJ-SAMPLE
RUN ../configure -T ../target/hifive1_gcc/ -o -DDEFAULT_CLOCK
RUN make clean && make depend && make
WORKDIR /home/$USER/asp-85mhz.git/OBJ-PERF0
RUN ../configure -T ../target/hifive1_gcc/ -A perf0 -a ../test -U "test_lib.o histogram.o" -o -DDEFAULT_CLOCK
RUN make clean && make depend && make
WORKDIR /home/$USER/asp-85mhz.git/OBJ-PERF1
RUN ../configure -T ../target/hifive1_gcc/ -A perf1 -a ../test -U "test_lib.o histogram.o" -o -DDEFAULT_CLOCK
RUN make clean && make depend && make
WORKDIR /home/$USER/asp-85mhz.git/OBJ-PERF2
RUN ../configure -T ../target/hifive1_gcc/ -A perf2 -a ../test -U "test_lib.o histogram.o" -o -DDEFAULT_CLOCK
RUN make clean && make depend && make
WORKDIR /home/$USER/asp-85mhz.git/OBJ-PERF3
RUN ../configure -T ../target/hifive1_gcc/ -A perf3 -a ../test -U "test_lib.o histogram.o" -o -DDEFAULT_CLOCK
RUN make clean && make depend && make
WORKDIR /home/$USER/asp-85mhz.git/OBJ-PERF4
RUN ../configure -T ../target/hifive1_gcc/ -A perf4 -a ../test -U "test_lib.o histogram.o" -o -DDEFAULT_CLOCK
RUN make clean && make depend && make

# Build each perf in asp-256mhz.git
WORKDIR /home/$USER
ENV PATH /home/$USER/toolchain/bin/:${PATH}
RUN mkdir asp-256mhz.git/OBJ-SAMPLE
RUN mkdir asp-256mhz.git/OBJ-PERF0
RUN mkdir asp-256mhz.git/OBJ-PERF1
RUN mkdir asp-256mhz.git/OBJ-PERF2
RUN mkdir asp-256mhz.git/OBJ-PERF3
RUN mkdir asp-256mhz.git/OBJ-PERF4
WORKDIR /home/$USER/asp-256mhz.git/OBJ-SAMPLE
RUN ../configure -T ../target/hifive1_gcc/ -o -DDEFAULT_CLOCK
RUN make clean && make depend && make
WORKDIR /home/$USER/asp-256mhz.git/OBJ-PERF0
RUN ../configure -T ../target/hifive1_gcc/ -A perf0 -a ../test -U "test_lib.o histogram.o" -o -DDEFAULT_CLOCK
RUN make clean && make depend && make
WORKDIR /home/$USER/asp-256mhz.git/OBJ-PERF1
RUN ../configure -T ../target/hifive1_gcc/ -A perf1 -a ../test -U "test_lib.o histogram.o" -o -DDEFAULT_CLOCK
RUN make clean && make depend && make
WORKDIR /home/$USER/asp-256mhz.git/OBJ-PERF2
RUN ../configure -T ../target/hifive1_gcc/ -A perf2 -a ../test -U "test_lib.o histogram.o" -o -DDEFAULT_CLOCK
RUN make clean && make depend && make
WORKDIR /home/$USER/asp-256mhz.git/OBJ-PERF3
RUN ../configure -T ../target/hifive1_gcc/ -A perf3 -a ../test -U "test_lib.o histogram.o" -o -DDEFAULT_CLOCK
RUN make clean && make depend && make
WORKDIR /home/$USER/asp-256mhz.git/OBJ-PERF4
RUN ../configure -T ../target/hifive1_gcc/ -A perf4 -a ../test -U "test_lib.o histogram.o" -o -DDEFAULT_CLOCK
RUN make clean && make depend && make

# From here, you can do whatever you want to.
USER $USER
WORKDIR /home/$USER
